package org.fhawk.tinyspring.core;

import java.lang.annotation.Annotation;
import java.util.List;

/**
 * Created by tuo on 8/11/2016.
 * 类扫描器
 */
public interface ClassScanner {
    /**
     * 根据包名 获取包下所有的类
     *
     * @param packageName 包名
     * @return 包下面的所有类
     */
    List<Class<?>> getAllClass(String packageName);

    /**
     * 根据包名 注解 获取类
     *
     * @param packageName 包名
     * @param anClass     注解
     * @return 指定包下带指定注解的类
     */
    List<Class<?>> getClassByAnnotation(String packageName, Class<? extends Annotation> anClass);

    /**
     * 根据包名 父类或接口  获取类
     *
     * @param packageName 包名
     * @param superClass  父类&接口
     * @return 类
     */
    List<Class<?>> getClassBySuperClass(String packageName, Class<?> superClass);

    /**
     * 获取包名下的实现类(排除接口)
     *
     * @param packageName 包名
     * @return 所有实现类
     */
    List<Class<?>> getAllImplClassWithoutInterface(String packageName);
}
